﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using SIM.Geo.BE;
using System.Linq;

namespace SIM.Geo.DA
{
    public class DAMuestraSondaje : Base
    {
        #region Metodos
        /// <summary>
        /// Método devuelve lista muestra sondaje
        /// </summary>
        /// <returns></returns>
        public List<MuestraSondaje> ListarMuestraSondaje(int codigoSondaje)
        {
            return this.Context.MuestraSondaje.Where(x => x.CodigoSondaje == codigoSondaje).ToList();
        }
        /// <summary>
        /// Método devuelve lista muestra sondaje por codigo de sondaje y tipo de calidad
        /// </summary>
        /// <returns></returns>
        public List<MuestraSondaje> ListarMuestraSondajePorSondajeYTipoControlCalidad(int codigoSondaje, int codigoTipoControlCalidad)
        {
            return this.Context.MuestraSondaje.Where(x => x.CodigoSondaje == codigoSondaje && x.CodigoTipoControlCalidad == codigoTipoControlCalidad).ToList();
        }
        /// <summary>
        /// Método devuelve lista muestra sondaje por codigo
        /// </summary>
        /// <returns></returns>
        public List<MuestraSondaje> BuscarMuestraSondajePorcodigo(int codigoSondaje, string codigoMuestraSondaje)
        {
            return this.Context.MuestraSondaje.Where(x => x.CodigoSondaje == codigoSondaje && x.CodigoMuestraSondaje.StartsWith(codigoMuestraSondaje)).ToList();
        }

        /// <summary>
        /// Método inserta una muestra sondaje
        /// </summary>
        /// <param name="muestrasondaje"></param>
        /// <returns></returns>
        public string InsertarMuestraSondaje(MuestraSondaje muestrasondaje)
        {
            this.Context.MuestraSondaje.AddObject(muestrasondaje);
            this.Context.SaveChanges();
            return muestrasondaje.CodigoMuestraSondaje;

        }
        /// <summary>
        /// Método inserta una muestra sondaje movil
        /// </summary>
        /// <param name="muestrasondaje"></param>
        /// <returns></returns>
        public string InsertarMuestraSondajeMovil(MuestraSondaje muestrasondaje)
        {
            this.Context.MuestraSondaje.AddObject(muestrasondaje);
            this.Context.SaveChanges();
            return muestrasondaje.CodigoMuestraSondaje;
        }
        /// <summary>
        /// Método modifica una muestra sondaje
        /// </summary>
        /// <param name="muestrasondaje"></param>
        public void ModificarMuestraSondaje(MuestraSondaje muestrasondaje)
        {
            this.Context.MuestraSondaje.Attach(muestrasondaje);
            this.Context.ObjectStateManager.ChangeObjectState(muestrasondaje, EntityState.Modified);
            this.Context.SaveChanges();
        }
        /// <summary>
        /// Método que elimina muestra sondaje
        /// </summary>
        /// <param name="muestrasondaje"></param>
        public void EliminarMuestraSondaje(MuestraSondaje muestrasondaje)
        {
            this.Context.MuestraSondaje.Attach(muestrasondaje);
            this.Context.ObjectStateManager.ChangeObjectState(muestrasondaje, EntityState.Deleted);
            this.Context.SaveChanges();
        }
        /// <summary>
        /// Método que actializa leyes de muestra
        /// </summary>
        /// <param name="leymuestra"></param>
        public void ActualizarLeyMuestra(MuestraSondaje leymuestra)
        {
            this.Context.MuestraSondaje.Attach(leymuestra);
            this.Context.ObjectStateManager.ChangeObjectState(leymuestra, EntityState.Modified);
            this.Context.SaveChanges();
        }
        public List<MuestraSondajeResponse> BuscarMuestraSondaje(string nombre)
        {

            return this.Context.MuestraSondaje.Where(x => x.CodigoMuestraSondaje.StartsWith(nombre))
                .Select(x => new MuestraSondajeResponse
                {
                    CodigoMuestraSondaje = x.CodigoMuestraSondaje,
                    Desde = x.Desde,
                    Hasta = x.Hasta,
                    //CodigoTomadorMuestra = x.CodigoTomadorMuestra,
                    //NombreTomadorMuestra = x.TomadorMuestra,
                    //FechaEnvio = x.FechaEnvio,
                    Observacion = x.Observacion,
                    Estado = x.Estado
                    //CodigoTipoControlCalidad = x.CodigoTipoControlCalidad,
                    //NombreTipoControlCalidad = x.TipoControlCalidad,
                    //CodigoMuestraSondajeDuplicado = x.CodigoMuestraSondajeDuplicado
                }
                ).ToList();

        }
        /// <summary>
        /// Método obtener muestra mensaje por codigo
        /// </summary>
        /// <param name="codigoMuestraMensaje"></param>
        /// <returns></returns>
        public MuestraSondaje ObtenerMuestraSondaje(string codigoMuestraSondaje)
        {
            return this.Context.MuestraSondaje.Where(x => x.CodigoMuestraSondaje.Equals(codigoMuestraSondaje)).FirstOrDefault();
        }

        /// <summary>
        /// Genera codigo de Muestra
        /// </summary>
        /// <returns></returns>
        public string GenerarCodigoMuestraSondaje()
        {
            return this.Context.generarCodigoMuestraSondaje().FirstOrDefault();
        }

        /// <summary>
        /// Devuelve lista de Muestras por Sondaje
        /// </summary>
        /// <param name="codigoSondaje"></param>
        /// <returns></returns>
        public List<buscarMuestraSondaje_Result> BuscarMuestraSondaje(int codigoSondaje)
        {
            return this.Context.buscarMuestraSondaje(codigoSondaje).ToList();
        }

        /// <summary>
        /// Método devuelve lista sondaje por codigos
        /// </summary>
        /// <returns></returns>
        public List<MuestraSondaje> ListarMuestraSondajePorcodigos(List<string> codigoMuestraSondajes)
        {
            return this.Context.MuestraSondaje.Where(x => codigoMuestraSondajes.Contains(x.CodigoMuestraSondaje)).ToList();
        }

        /// <summary>
        /// Validar Interseccion
        /// </summary>
        /// <param name="codigoSondaje"></param>
        /// <param name="tipoAnalisis"></param>
        /// <param name="desde"></param>
        /// <param name="hasta"></param>
        /// <returns></returns>
        public int ValidarInterseccionMuestraSondaje(int codigoSondaje, string codigoMuestraSondaje, double desde, double hasta, int codigoTipoControlCalidad)
        {
            System.Data.Objects.ObjectParameter output = new System.Data.Objects.ObjectParameter("Result", 0);
            int result = (int)this.Context.validarInterseccionMuestraSondaje(codigoSondaje, codigoMuestraSondaje, desde, hasta, codigoTipoControlCalidad, output).FirstOrDefault();
            return result;
        }
        /// <summary>
        /// Devuelve el ultimo Hasta
        /// </summary>
        /// <param name="codigoSondaje"></param>
        /// <returns></returns>
        public double ObtenerUltimoHasta(int codigoSondaje)
        {
            return (double)this.Context.obtenerUltimoHastaMuestraSondaje(codigoSondaje).FirstOrDefault();
        }

        /// <summary>
        /// Devuelve 0 = Exito, 1 = No es valida la distancia
        /// </summary>
        /// <param name="codigoSondaje"></param>
        /// <param name="hasta"></param>
        /// <param name="codigoTipoControlCalidad"></param>
        /// <returns></returns>
        public int ValidarDistanciaMuestraSondaje(int codigoSondaje, double hasta, int codigoTipoControlCalidad)
        {
            System.Data.Objects.ObjectParameter output = new System.Data.Objects.ObjectParameter("Result", 0);
            return (int)this.Context.validarDistanciaMuestraSondaje(codigoSondaje, hasta, codigoTipoControlCalidad, output).FirstOrDefault();
        }
        #endregion
    }
}
